package com.hz.tgb.api.invoice.pdf.test.model;

import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;


/**
 * OCR增值税发票识别实体类
 *
 * @author hezhao on 2019-08-28 17:46
 */
@Data
public class OcrVatInvoice implements Serializable {
    private static final long serialVersionUID = 1L;

    /** ID */
    private Long id;

    /** 发票代码 */
    private String invoiceCode;

    /** 发票号码 */
    private String invoiceNumber;

    /** 开票日期 */
    private Date invoiceDate;

    /** 校验码 */
    private String checkCode;

    /** 机器编号 */
    private String machineNumber;

    /** 货物名称 */
    private String goodsName;

    /** 税率 */
    private Double taxRate;

    /** 价总额-不含税 */
    private Double totalWithoutTaxAmount;

    /** 税总额 */
    private Double totalTaxAmount;

    /** 价税合计 */
    private Double totalWithTaxAmount;

    /** 价税合计(大写) */
    private String totalWithTaxAmountCn;

    /**
     * 发票类型 <br>
     *              01 增值税专用发票<br>
     *              02 货物运输业增值税专用发票<br>
     *              03 机动车销售统一发票<br>
     *              04 增值税普通发票<br>
     *              10 增值税电子普通发票<br>
     *              11 增值税普通发票（卷票）<br>
     */
    private String invoiceType;

    /** 专票/普票，(0-普票，1-专票) */
    private Integer specialFlag;

    /** 购买方名称 */
    private String buyerName;

    /** 购买方纳税人识别号 */
    private String buyerTaxpayerCode;

    /** 购买方地址、电话 */
    private String buyerAddressPhone;

    /** 购买方开户行及账号 */
    private String buyerBankNo;

    /** 销售方名称 */
    private String sellerName;

    /** 销售方纳税人识别号 */
    private String sellerTaxpayerCode;

    /** 销售方地址、电话 */
    private String sellerAddressPhone;

    /** 销售方开户行及账号 */
    private String sellerBankNo;

    /** 收款人 */
    private String chamberlainName;

    /** 复核 */
    private String checkName;

    /** 开票人 */
    private String drawerName;

    /** 销售方(章) */
    private String salesParty;

    /** 发票备注 */
    private String remark;

    /** 发票是否有效（0-作废，1-有效） */
    private Integer validFlag;

    /** 是否验真成功（0-未验真，1-验真成功，2-验真失败） */
    private Integer verifyFlag;

    /** 货物明细列表 */
    private List<OcrVatInvoiceItem> items = new ArrayList<>();

    /** 添加货物
     * @param item
     */
    public void addItem(OcrVatInvoiceItem item) {
        this.items.add(item);
    }

}